<!DOCTYPE html>
<html lang='en'>
<head>
    <meta charset='UTF-8'>
    <meta http-equiv='X-UA-Compatible' content='IE=edge'>
    <meta name='viewport' content='width=device-width, initial-scale=1.0'>
    <title>Document</title>
    <script src='../vue.js'></script>
</head>
<body>
    <div id='app'>
        <input type="text" v-model="search">
        <ul>
            <li v-for="item in newPerson" :key="item.id">
                {{item.name}}---{{item.age}}
            </li>
        </ul>
        <br>
        <button @click="sortType=1">升序</button>
        <br>
        <button @click="sortType=2">降序</button>
    </div>
    <script>
        /* 
        用按钮的是想来控制升序还是降序 
            用数据中sortType来表示升序还是降序
            当sortType是1的时候是升序
            当sortType是2的时候是降序
        */
        Vue.config.productionTip = false;
        const vm = new Vue({
            el:'#app',
            data(){
                return {
                search:'',
                person:[
                    {id:'001',name:'laowang',age:18},
                    {id:'002',name:'dawang',age:15},
                    {id:'003',name:'xiaowang',age:10},
                    {id:'004',name:'hang',age:19}
                ],
                sortType:0
            }
            },
            computed:{
              newPerson(){
                // 一般都是先过滤再排序 过滤之后数据变少了 排序就操作快了
                //过滤
                const filterResult = this.person.filter((item)=>{
                    //this.search一开始上来的时候是空串
                    // 不管谁用includes检测空串都是为true
                    return item.name.includes(this.search)
                })

                //排序
                return filterResult.sort((a,b)=>{
                    //sort排序原理:依次进入两个值,a是后边的值,b是前边的值
                    //当sort的回调函数返回负数 则交换两个值在数组中的位置 是升序
                    switch(this.sortType){
                        case 1:
                            return a.age - b.age;
                        case 2:
                            return b.age - a.age
                    }
                })
              }
            }
    })
    </script>
</body>
</html>